package com.baitengsoft.patentapimonitor.api.service;

import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.util.List;

/**
 * @author Chen 2017/12/18
 */
@Service
public interface BaseService<T> {
    /**
     * 根据Id主键去查询
     */
    public T queryById(Serializable id);

    /**
     * 查询所有
     */
    public List<T> queryAll();

    /**
     * 查询一个
     */
    public T queryOne(T t);

    /**
     * 根据条件查询,所给出的参数可以查询到多条的数据
     */
    public List<T> queryListByWhere(T t);

    /**
     * 根据条件查询,并且分页
     */
    public PageInfo<T> queryPageListByWhere(Integer pageNum, Integer pageSize, T t);

    /**
     * 保存,且为null的值也保存
     */
    public Integer sava(T t);

    /**
     * 保存,只保存不为空的值 建议使用
     */
    public Integer saveByNotNull(T t);

    /**
     * 根据更新,要求主键不能为null 所有的字段进行更新
     */
    public Integer update(T t);

    /**
     * 根据更新,要求主键不能为null 不为null的字段进行更新
     */
    public Integer updateByNotNull(T t);

    /**
     * 根据Id删除
     */
    public Integer deleteById(Serializable id);

    /**
     * 批量删除
     */
    public Integer deleteByIds(List<Object> ids,String properties,Class<T> clazz);

    /**
     * 根据条件查询
     */
    public Integer deleteByWhere(T t);
}
